#include <iostream>
#include <unordered_map>
#include <algorithm>
#include <vector>
using namespace std;

string& my_max(string& str1, string& str2)
{
    int n1 = str1.size();
    int n2 = str2.size();
    if (n1 > n2)
    {
        return str1;
    }
    return str2;
}

string& my_min(string& str1, string& str2)
{
    int n1 = str1.size();
    int n2 = str2.size();
    if (n1 > n2)
    {
        return str2;
    }
    return str1;
}

int main() {
    string str1;
    string str2;
    cin >> str1 >> str2;
    unordered_map<string, int>hash;
    string str3 = my_min(str1, str2);
    int n1 = str3.size();
    int k = 0;
    while (k < n1)
    {
        int t = 0;
        while (t <= k)
        {
            hash[str3.substr(t, k - t + 1)];
            t++;
        }
        k++;
    }
    string str4 = my_max(str1, str2);
    int n2 = str4.size();
    k = 0;
    int maxstr = 0;
    while (k < n2)
    {
        int t = 0;
        while (t <= k)
        {
            if (hash.find(str4.substr(t, k - t + 1)) != hash.end())
            {
                int n = (str4.substr(t, k - t + 1)).size();
                if (n > maxstr)
                {
                    maxstr = n;
                }
            }
            t++;
        }
        k++;
    }
    cout << maxstr << endl;
    return 0;
}
//
//int main() {
//    int n;
//    while (cin >> n)
//    {
//        if (n == 0)
//        {
//            ;
//        }
//        else
//        {
//            int sum = 0;
//            int k = 0;
//            while (n / 3)
//            {
//                sum += (n / 3);
//                n = (n / 3 + n % 3);
//            }
//            if (n + 1 == 3)
//            {
//                sum += 1;
//            }
//            cout << sum << endl;
//        }
//    }
//    return 0;
//}

void Adjustant(vector<int>& arr,int parent,int n)
{
	int child = 2 * parent + 1;
	while (child < n)
	{
		if (child + 1 < n && arr[child + 1] < arr[child])
		{
			child++;
		}
		if (arr[parent] > arr[child])
		{
			swap(arr[parent], arr[child]);
			parent = child;
			child = parent * 2 + 1;
		}
		else
		{
			break;
		}
	}
}

int main()
{
	vector<int> arr = { 1 ,8, 6, 2, 5 ,4 ,7 ,3 };
	int n = arr.size();
	for (int i = (n - 1 - 1) / 2; i >= 0; i--)
	{
		Adjustant(arr, i, n);
	}
	for (auto s : arr)
	{
		cout << s << " ";
	}
	cout << endl;
	return 0;
}